package com.note.feng.leetcode.algorithms.easy.nine;

import java.util.ArrayList;
import java.util.List;

public class NineHundredEightyNine {
    /**
     * 989 数组形式的整数加法
     * 整数的 数组形式  num 是按照从左到右的顺序表示其数字的数组。
     *
     * 例如，对于 num = 1321 ，数组形式是 [1,3,2,1] 。
     * 给定 num ，整数的 数组形式 ，和整数 k ，返回 整数 num + k 的 数组形式 。
     *
     * 示例 1：
     *
     * 输入：num = [1,2,0,0], k = 34
     * 输出：[1,2,3,4]
     * 解释：1200 + 34 = 1234
     * 示例 2：
     *
     * 输入：num = [2,7,4], k = 181
     * 输出：[4,5,5]
     * 解释：274 + 181 = 455
     * 示例 3：
     *
     * 输入：num = [2,1,5], k = 806
     * 输出：[1,0,2,1]
     * 解释：215 + 806 = 1021
     *
     * 提示：
     *
     * 1 <= num.length <= 104
     * 0 <= num[i] <= 9
     * num 不包含任何前导零，除了零本身
     * 1 <= k <= 104
     *
     * 来源：力扣（LeetCode）
     * 链接：https://leetcode.cn/problems/add-to-array-form-of-integer
     */
    /**
     * 解法：逐位相加
     * 从低位到高位，依次相加，若结果大于 10，把进位的结果加到下一位的计算中
     * @param num
     * @param k
     * @return
     */
    public List<Integer> addToArrayForm(int[] num, int k) {
        List<Integer> list = new ArrayList<>();
        for (int i = num.length - 1; i >= 0 ; i--) {
            int s = k % 10 + num[i];
            k /= 10;
            k += s / 10;
            list.add(0, s % 10);
        }
        for (; k > 0; k /= 10) {
            list.add(0, k % 10);
        }
        return list;
    }
}
